package com.dhj.yygh.service;

import com.dhj.yygh.model.hosp.Schedule;
import com.dhj.yygh.vo.hosp.ScheduleOrderVo;
import com.dhj.yygh.vo.hosp.ScheduleQueryVo;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

/*
医院排班 com.dhj.yygh.controller.service
*/
public interface ScheduleService {

    /**
     * 上传排班信息
     *
     * @param scheduleMap 参数集合对象
     */
    void saveSchedule(Map<String, Object> scheduleMap);

    /**
     * 获取分页信息
     *
     * @param page            当前页
     * @param limit           每页记录数
     * @param scheduleQueryVo 视图对象
     * @return 返回分页对象
     */
    Page<Schedule> getPageByHoscode(Integer page, Integer limit, ScheduleQueryVo scheduleQueryVo);

    /**
     * 删除医院排班信息
     *
     * @param hoscode     医院代码
     * @param hosShcedule 排班信息 id
     * @return 返回删除的记录数
     */
    Long removeByHoscodeAndHosSchedule(String hoscode, String hosShcedule);

    /**
     * 根据医院编号，科室编号分页查询排班信息
     *
     * @param page      当前页码
     * @param pageCount 每页记录数
     * @param hoscode   医院编号
     * @param depcode   科室编号
     * @return 返回结果 Map 集合
     */
    Map<String, Object> getScheduleRule(Integer page, Integer pageCount, String hoscode, String depcode);

    /**
     * 获取排班详情信息
     *
     * @param hoscode  医院代码
     * @param depcode  科室代码
     * @param workDate 排班时间
     * @return 返回排班详情
     */
    List<Schedule> getScheduleDetails(String hoscode, String depcode, String workDate);


    /**
     * 获取可预约的排班数据
     *
     * @param page    当前页
     * @param limit   没有记录数
     * @param hoscode 医院代码
     * @param depcode 科室代码
     * @return 返回结果 Map 集合
     */
    Map<String, Object> getBookingScheduleRule(Integer page, Integer limit, String hoscode, String depcode);

    /**
     * 根据 Schedule id 获取 Sechedule 对象
     *
     * @param id id
     * @return 返回 Schedule 对象
     */
    Schedule getScheduleById(String id);


    /**
     * 根据排班 id 获取预约下单排班数据
     *
     * @param scheduleId 排班 id
     * @return 返回
     */
    ScheduleOrderVo getScheduleOrderVo(String scheduleId);

    /**
     * 下单后更新排班数据
     *
     * @param schedule 排班对象
     */
    void updateSchedule(Schedule schedule);
}
